經過上一篇努力一番建立好環境之後,接下終於要進入實作環節了OwO
如同學習程式語言的第一支程式是HelloWorld,LINE BOT的第一個練習就是鸚鵡式機器人
所謂鸚鵡式機器人就是 你說甚麼,它就說甚麼
主要會有幾個階段
事不宜遲就馬上開始吧
先到昨天建立的資料夾中開啟新檔案吧,用VScode開啟會更好喔!
名稱就叫main.py
先將模板放入main.py中
from flask import Flask, request, abort
from linebot import (
LineBotApi, WebhookHandler
)
from linebot.exceptions import (
InvalidSignatureError
)
from linebot.models import *
app = Flask(__name__)
# LINE BOT info
line_bot_api = LineBotApi('Channel Access token')
handler = WebhookHandler('Channel Secret')
@app.route("/callback", methods=['POST'])
def callback():
signature = request.headers['X-Line-Signature']
body = request.get_data(as_text=True)
app.logger.info("Request body: " + body)
print(body)
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400)
return 'OK'
# Message event
@handler.add(MessageEvent)
def handle_message(event):
message_type = event.message.type
user_id = event.source.user_id
reply_token = event.reply_token
message = event.message.text
line_bot_api.reply_message(reply_token, TextSendMessage(text = message))
import os
if __name__ == "__main__":
port = int(os.environ.get('PORT', 80))
app.run(host='0.0.0.0', port=port)
將第13行
以及第14行
中的 Channel Access token 以及 Channel Secret 改成上一篇提到要記的兩個值放入
Line 16~26
指定在 /callback 通道上接收訊息,且方法是 POST
而callback()是為了要檢查連線是否正常
其中signature
是LINE官方提供用來檢查該訊息是否透過LINE官方APP傳送
而body
就是用戶傳送的訊息,並且是以JSON的格式傳送
Line 28~35
這邊是用來接收訊息的地方
特別注意到第35行的line_bot_api.reply_message()
它是回傳訊息的方法,而我們設定回傳的型態是文字(text)
而我們接收到的訊息會被放在event中,一樣會是JSON格式
這邊特別注意這幾個內容
Line 37~40
這裡是指定我們的BOT執行的位置
是在 0.0.0.0:80
接上前面所說的,我們的BOT會接收訊息的位置也就是0.0.0.0:80/callback
在實作之前,先帶大家看看webhook是什麼吧~
在前一篇提過的API,是我們主動要求訊息,再由對方的server回傳結果
考慮一個狀況
今天你是外送員要送餐,在送餐之前餐廳會先收到訂單
不過你要怎麼決定什麼時候去取餐呢?
Webhook就是這樣的道理
當LINE Platfrom接收到來自使用者的訊息後,透過API接口,webhook通道使得LINE Platform從被動方變成主動方,將訊息傳送到BOT Server
實際上,這份code已經完成了鸚鵡的功能了,是在line 35
的位置
那接下來我們就讓它動起來吧~
ngrok.exe http 80
如果你是使用WSL的話
./ngrok http 80
python main.py
到目前為止,你的畫面應該會是這個樣子
你會發現現在我們有一個在 0.0.0.0:80 上跑的python
還有一個會將訊息導向 localhost:80 上的webhook
我們現在只需要讓LINE 知道我們的webhook在哪裡就完成了!
前往 https://manager.line.biz/ 登入自己的LINE帳號,並進入自己的LINE BOT
點擊右上角的設定 > Messaging API
將Webhook網址改成剛剛ngrok上看到的網址加上/callback並儲存
這樣一來,我們的通道就建構成功啦!
先將我們的LINE BOT加入好友後來試試看功能吧!
LINE ID可以在剛剛的網頁上方找到
接下來就可以跟自己的BOT聊天啦~
到這邊,鸚鵡型機器人就完成了!
現在,你可把使用者傳送過來的訊息當作是輸入
把handle message
當成是main
函數
把line_bot_api.reply_message(reply_token, ...)
當成是輸出
中間透過自訂的程式,可以再自己嘗試看看其他玩法喔!
像是只會說早安的機器人XD
當作程式的輸入輸出是很重要的概念
中間訊息究竟如何被傳送我們不明白
但是我們知道,只要透過這種方式一定能將訊息傳送到,這就是API帶來的效果
一開始有在想直接給模板是不是好的
不過好像也想不到其他做法,就如同一開始學C++
#include<iostream>
using namespace std;
int main(){
return 0;
}
把這個當成必須存在的模板,之後再慢慢了解體會它的涵義
希望大家也可以嘗試自己實做看看
光是看文章而沒有動手去做是很可惜的
(難道你們都沒有創造新東西會有的那種快感嗎QQ
加油,之後很多實作內容都是以這個為基礎,只要熟悉這裡後面就會輕鬆很多
大概就是做資料處理跟Python語法問題了XDD
你好,我造著複製程式碼下載pip3 install line-bot-sdk flask
但會找不到linebot
File ".\main.py", line 2, in
from linebot import (
ModuleNotFoundError: No module named 'linebot'
可以請問該怎麼解決嗎
可能會是因為當初沒有裝好 line-bot-sdk
如果有當時 pip install 的訊息也許比較好確認
不過也許可以嘗試看看把 pip3 改成 pip